<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of persistenciaClienteAdministracion
 *
 * @author Agustin
 */
require_once ('Modelo/persistenciaCliente.php');
require_once ('persistenciaLugar.php');

class PersistenciaClienteAdministracion extends PersistenciaCliente {

    private static $instancia;

    public static function getInstance() {
        if (!self::$instancia instanceof self) {
            self::$instancia = new self;
        }
        return self::$instancia;
    }

    public function buscarClienteANombre($datos) {
        $nombre = $datos[0];
        if ($nombre != '') {
            $resarr = $this->buscarClienteNombreAdmin($nombre);
            $arrayres = array();
            if (is_array($resarr)) {
                foreach ($resarr as $row) {
                    $arrayres[] = $this->armarClienteAdmin($row['idcliente'], $row['nombre'], $row['responsable'], null, null);
                }
            }
            return $arrayres;
        }
    }

    public function buscarClienteAId($id) {
        $lugDB = PersistenciaLugar::getInstance();
        $telDB = PersistenciaTelefono::getInstance();
        $arrayres = $this->buscarClienteIdAdmin($id);
        $lugares = $lugDB->traerLugares($arrayres['idcliente']);
        $telefonos = $telDB->traerTelefonosClientes($arrayres['idcliente']);
        $cli = $this->armarClienteAdmin($arrayres['idcliente'], $arrayres['nombre'], $arrayres['responsable'], $lugares, $telefonos);
        return $cli;
    }

    public function agregarClienteA($datos) {
        $nombre = $datos[0];
        $responsable = $datos[1];
        try {
            $addCli = $this->agregarCliente($nombre, $responsable);
            $addCliA = $this->agregarClienteAdminPersist();
            if ($addCli && $addCliA) {
                return 'Guardado con éxito';
            } else {
                return 'Ha ocurrido un error.';
            }
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function actualizarClienteA($datos) {
        $idcliente = $datos[0];
        $nombre = $datos[1];
        $responsable = $datos[2];
        $actCli = $this->actualizarCliente($idcliente, $nombre, $responsable);
        if ($actCli) {
            return 'Actualizado con éxito';
        } else {
            return 'Ha ocurrido un error.';
        }
    }

    private function buscarClienteNombreAdmin($nombre) {
        try {
            require_once 'conexion.php';
            $db = conexion::getInstance();
            $db->conectar();
            $resultado = $db->consulta('SELECT clientes.idcliente, nombre, responsable FROM clientes
INNER JOIN (SELECT * FROM clientesadministraciones) AS cli WHERE clientes.idcliente = cli.idcliente
AND clientes.nombre LIKE \'' . $nombre . '%\'');
            if (count($resultado) > 0) {
                return $resultado;
            } else {
                return 'No existe ese cliente.';
            }
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    public function buscarClienteNombreAdminUnico($nombre) {
        try {
            require_once 'conexion.php';
            $db = conexion::getInstance();
            $db->conectar();
            $resultado = $db->consulta('SELECT * FROM clientes where clientes.nombre = \'' . $nombre . '\'');
            if (count($resultado) > 0) {
                return $resultado;
            } else {
                return 'No existe ese cliente.';
            }
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    private function buscarClienteIdAdmin($id) {
        require_once 'conexion.php';
        $db = conexion::getInstance();
        try {
            $db->conectar();
            $resultado = $db->consulta('SELECT clientes.idcliente, nombre, responsable FROM clientes INNER JOIN (SELECT * FROM clientesadministraciones) AS cli WHERE clientes.idcliente = cli.idcliente and clientes.idcliente = ' . $id . ';');
            if (count($resultado) > 0) {
                return $resultado[0];
            } else {
                return 'No existe ese cliente.';
            }
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    private function agregarClienteAdminPersist() {
        require_once 'conexion.php';
        $db = conexion::getInstance();
        try {
            $db->conectar();
            $consulta = 'insert into clientesadministraciones (idCliente) values (' . $db->obtenerUltimoID() . ');';
            $db->consulta($consulta);
            return true;
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    private function armarClienteAdmin($id, $nombre, $responsable, $lugares, $telefonos) {
        require_once 'Modelo/clienteAdministracion.php';
        $cliente = new ClienteAdministracion();
        $cliente->nombre = $nombre;
        $cliente->id = $id;
        $cliente->responsable = $responsable;
        $cliente->lugares = $lugares;
        $cliente->telefonos = $telefonos;
        return $cliente;
    }

}

?>
